arpコマンドを利用してJetsonのIPアドレスを検索する(Windows)
カフェチームの山本です。
現在、機械学習のモデルを動かすため、NVIDIA製のJetson Xavier NXを利用しています。Jetsonをセットアップし、カフェのネットワークに接続して利用するのですが、設置した後にsshなどで接続するために、IPアドレスが必要です(特に、SDカードをコピーして別のJetsonで起動した際、IPアドレスを再度確認する必要がありますが、わざわざ外付けディスプレイや、キーボードなどを用意するのは面倒です)。
今回は、ARP(とping)を利用して、ネットワークに接続されているJetsonのIPアドレスを調べるスクリプトを作成しました。これによって、新しく接続したJetsonのIPアドレスを、外付けディスプレイなどがなくても検索できます。(後述のフィルタリングの部分を変えれば、JetsonではなくRaspberry Piなどを調べることも可能です)。
作成したスクリプト
PowerShellで書いたスクリプトは以下のとおりです。これをJetsonが接続しているのと同じネットワークで接続したWindowsマシンで実行すれば、結果を得られます。
# ネットワークの全アドレスにpingを実行し、 # ARPのテーブルに項目を追加する for ($i=0; $i -lt 256; $i++){ ping -w 1 -n 1 192.168.0.$i } echo "---- Jetson list -----------" arp -a | findstr "70-66 48-b0" # 70-66: wireless interface # 48-b0: wired interface Read-Host "press ENTER to close"
それぞれのコマンドの意図や意味について、説明します。
ネットワークの全IPアドレスに対してpingを実行
何もしない状態で、arpコマンドを実行すると、デバイスがネットワークには接続されていても、結果に表示されない場合があります。これを解消するため、for文を利用して、ネットワーク内の全てのIPアドレスに対してpingを実行します。これによって、実際に通信を行ったデバイスへのIPアドレスを、ARPが表示するようになります。
-wはタイムアウトまでの秒数、-nは実行する回数を指定するオプションです。(これを256回実行するため、およそ4分程度かかります。接続されているデバイスが多く、すぐにpingに応答する場合は、もう少し時間が短くてすみます。)
「192.168.0.$i」の部分は、お使いのネットワークに合わせて適宜変更してください。また、サブネットマスクが"255.255.255.0"でない場合は、for内の「256」や「192.168.0.$i」の部分も適宜変更する必要があります。
ARPテーブルの表示
arp -a を実行すると、以下のようにARPテーブル(IPアドレスとMACアドレスの対応表)が表示されます。
例)実行結果
インターネット アドレス 物理アドレス 種類 192.168.0.1 b0-4e-26-9f-21-a0 動的 192.168.0.148 2c-fd-a1-83-76-78 動的
MACアドレスを利用した候補の絞り込み(フィルタリング)
接続されているデバイスが多いと、ARPテーブルに表示される項目が多く、どれがJetsonだかわかりにくいめ、findstrで絞り込みました。
今回は、Jetsonの無線・有線インタフェースのどちらも表示するようにするため、findstrの引数を"70-66 48-b0"とすることで、ORの条件で検索しています。70-66が無線、48-b0が有線です。
実行結果
以下のように、ネットワークに接続したJetsonのIPアドレスが出力されました。(右の箇所文字化けしていますが、arp -aの結果では「動的」が出力されていました)
まとめ
pingとARPを利用して、ネットワークに接続されたJetson Xavier NXのIPアドレスを調べるスクリプトを作成しました。